#include <iostream>
#include <vector>

// 3
// void func(int &a)
// {
//     std::cout << a << std::endl;
// }

class Test
{
public:
    Test()
    {
        a = new int;
    }
    ~Test()
    {
        if (a)
            delete a;
    }
    Test(const Test &t)
    {
        std::cout << "深拷贝\n";
        this->a = new int(*t.a);
    }
    // 移动语义：夺取资源
    Test(Test &&t) // 移动构造函数：通过夺取其他对象资源构建自身
    {
        std::cout << "移动构造\n";
        a = t.a;
        t.a = nullptr; // 再将这块资源置空
    }
private:
    int *a;
};

int main()
{
    // int &&a = 10; // 右值引用：可以引用右值

    // Test t;
    // // 把左值变成右值 move
    // Test t1 = std::move(t);  

    std::vector<int> v = {1,2,3};
    std::vector<std::vector<int>> v2;
    v2.push_back(std::move(v));    // 减少容器对象的拷贝
    std::cout<<v.size()<<std::endl;  // 被夺走之后原容器size为0

    return 0;
}
